/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import dao.DAO;
import dao.exceptions.NonexistentEntityException;
import dao.exceptions.PreexistingEntityException;
import java.util.List;
import modelo.Lei;

/**
 * Classe que fará a ponte entre Controlador e DAO, e irá também cuidar
 * das regras de negocio.
 * 
 * @author emersonmx
 * @since 0.1
 */
public interface Negocio {

  /**
   * Pega o DAO atual.
   *
   * @return o DAO atual.
   */
  public DAO getDAO();

  /**
   * Define o DAO atual.
   *
   * @param dao a ser definido.
   */
  public void setDAO(DAO dao);

  /**
   * Passa a chamada de inserção para o dao.
   *
   * @param o objeto a ser repassado para o DAO.
   */
  public void inserir(Object o);

  /**
   * Passa a chamada de alteração para o dao.
   *
   * @param o objeto a ser repassado para o DAO.
   * @throws NonexistentEntityException quando não for encontrado o registro
   * a ser alterado repassa para o nivel acima.
   * @throws Exception em caso de ocorrer qualquer outro tipo de erro repassa o
   * mesmo para o nivel acima.
   */
  public void alterar(Object o) throws NonexistentEntityException, Exception;

  /**
   * Passa a chamada de exclusão para o dao.
   *
   * @param id a ser repassado para o DAO.
   * @throws NonexistentEntityException quando não for encontrado o registro
   * a ser alterado repassa para o nivel acima.
   */
  public void excluir(Long id) throws NonexistentEntityException;

  /**
   * Passa a chamada de pesquisa de todos os registro para o dao.
   *
   * @return a lista retornada pela chamada de pesquisa do DAO.
   */
  public List pesquisar();

  /**
   * Passa a chamada de pesquisa por campo para o dao.
   *
   * @param o objeto a ser repassado para o DAO.
   * @return a lista retornada pela chamada de pesquisa de campos do DAO.
   */
  public List pesquisar(Object o);

  /**
   * Passa a chamada de pesquisa especifica por resultados maximos e pelo
   * primeiro resultado para o dao.
   *
   * @param resultadosMaximo repassa para o DAO a quantidade maxima de resultados.
   * @param primeiroResultado repassa para o DAO quem será o primeiro resultado.
   * @return a lista retornada pela chamada de pesquisa do DAO.
   */
  public List pesquisar(int resultadosMaximo, int primeiroResultado);

  /**
   * Passa a chamada de pesquisa especifica para o dao.
   *
   * @param tudo passa para o DAO se quer que pesquise tudo ou não.
   * @param resultadosMaximo repassa para o DAO a quantidade maxima de resultados.
   * @param primeiroResultado repassa para o DAO quem será o primeiro resultado.
   * @return a lista retornada pela chamada de pesquisa do DAO.
   */
  public List pesquisar(boolean tudo, int resultadosMaximo, int primeiroResultado);

  /**
   * Passa a chamada de pesquisa por id para o dao.
   *
   * @param id a ser repassado para o DAO.
   * @return o objeto que foi retornado pelo DAO.
   */
  public Object pesquisar(Long id);

  /**
   * Passa a chamada de contagem para o DAO.
   *
   * @return a quantidade de registro que foi retornada pelo DAO.
   */
  public int contar();

    public boolean revogar(String a);

    public boolean pesquisarObjetoExistente(Long id);

    public boolean numeroLeiUnica(String numeroLei);

    public boolean existObject(Lei l);
}
